#include "gtkcssnumbervalueprivate.h"
#include "gtkcssstringvalueprivate.h"
#include "gtkcssstylepropertyprivate.h"
+#include "gtksettingsprivate.h"
#include "gtkstyleproviderprivate.h"
struct _GtkCssValue {
switch (property_id)
{
+ case GTK_CSS_PROPERTY_DPI:
+ settings = _gtk_style_provider_private_get_settings (provider);
+ if (settings)
+ {
+ GdkScreen *screen = _gtk_settings_get_screen (settings);
+ double resolution = gdk_screen_get_resolution (screen);
+
+ if (resolution > 0.0)
+ return _gtk_css_number_value_new (resolution, GTK_CSS_NUMBER);
+ }
+ break;
+
case GTK_CSS_PROPERTY_FONT_FAMILY:
settings = _gtk_style_provider_private_get_settings (provider);
if (settings)
return _gtk_css_array_value_new (css_image_value_assign (property, value));
}
+static GtkCssValue *
+dpi_parse (GtkCssStyleProperty *property,
+ GtkCssParser *parser)
+{
+ return _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_NUMBER);
+}
+
static GtkCssValue *
font_size_parse (GtkCssStyleProperty *property,
GtkCssParser *parser)
void
_gtk_css_style_property_init_properties (void)
{
- /* Initialize "color" and "font-size" first,
+ /* Initialize "color", "-gtk-dpi" and "font-size" first,
* so that when computing values later they are
* done first. That way, 'currentColor' and font
* sizes in em can be looked up properly */
color_query,
color_assign,
_gtk_css_color_value_new_rgba (1, 1, 1, 1));
+ gtk_css_style_property_register ("-gtk-dpi",
+ GTK_CSS_PROPERTY_DPI,
+ G_TYPE_NONE,
+ GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
+ GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_SIZE,
+ dpi_parse,
+ NULL,
+ NULL,
+ _gtk_css_number_value_new (96.0, GTK_CSS_NUMBER));
gtk_css_style_property_register ("font-size",
GTK_CSS_PROPERTY_FONT_SIZE,
G_TYPE_DOUBLE,
enum { /*< skip >*/
GTK_CSS_PROPERTY_COLOR,
+ GTK_CSS_PROPERTY_DPI,
GTK_CSS_PROPERTY_FONT_SIZE,
GTK_CSS_PROPERTY_ICON_THEME,
GTK_CSS_PROPERTY_BACKGROUND_COLOR,
PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL);
pango_font_description_free (font_desc);
+
+ pango_cairo_context_set_resolution (context,
+ _gtk_css_number_value_get (
+ _gtk_style_context_peek_property (style_context,
+ GTK_CSS_PROPERTY_DPI),
+ 100));
}
static void
screen = gtk_widget_get_screen_unchecked (widget);
if (screen)
{
- pango_cairo_context_set_resolution (context,
- gdk_screen_get_resolution (screen));
pango_cairo_context_set_font_options (context,
gdk_screen_get_font_options (screen));
}